/** 模板字符串 */

/**
 * 在这里强调下 string & 的使用；这个方法常作用于模版字符串中。表示这个类型需要是string类型的，否则认为是never。直接跳过。可以理解是二进制位运算
 */


// K extens string & keyof T 表示，只取那些keyof T是string类型的。像symbol就会舍弃掉
type ProEventSource<T> = {
    on<K extends string & keyof T>(eventName: `${K}Change`, callback: (newValue: T[K]) => void) : void; 
}

type P = {
    click: string;
}









